package com.baofu.paycore.biz.engine.command.impl;

import com.baofu.paycore.biz.engine.command.Command;
import com.baofu.paycore.biz.enums.CommandProcessorEnum;
import com.baofu.paycore.biz.enums.CommandTypeEnum;
import com.baofu.paycore.common.enums.CardTypeEnum;
import com.baofu.paycore.service.facade.enums.PayToolTypeEnum;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

import java.util.Date;
import java.util.Map;

/**
 * 银行支付命令
 *
 * User: LZQ Date: 2016/04/21  Version: 1.0
 */
@Setter
@Getter
@ToString
public class BankCommand implements Command {

    /** 关联号 */
    private String          relationNo;

    /** 支付单号 */
    private String          requestOrderNo;

    /** 资金单号 */
    private String          requestBizNo;

    /** 业务请求时间 */
    private Date            requestDate;

    /** 金额 */
    private Long            amount;

    /** 币种 */
    private String          ccy;

    /** 请求渠道 */
    private String          requestChannel;

    /** 终端设备 */
    private String          requestSystem;

    /** 客户账号 */
    private String          contractNo;

    /** 收款方账户号 */
    private String          payeeAccNo;

    /** 收款方账户类型 */
    private String          payeeAccType;

    /** 银行卡类型 */
    private CardTypeEnum    cardType;

    /** 业务产品大类 */
    private String          bizType;

    /** 公私标识 */
    private String          opFlag;

    /** 业务产品细类 */
    private String          subBizType;

    /** 支付工具 */
    private String          payTool;

    /** 支付工具细类 */
    private String          subPayTool;

    /**
     * 银行代码
     */
    private String          bankCode;

    /**
     * 业务收费金额
     */
    private Long            bizChargeAmt;

    /**
     * 出账手续费账户
     */
    private String          bizFeeAccount;

    /**
     * 协议组成编号
     */
    private String          agreeRelId;

    /**
     * 绑卡协议号
     */
    private String          agreementNo;

    /**
     * 操作人
     */
    private String          operator;

    /**
     * 追踪日志ID
     */
    private String          traceLogId;

    /**
     * 描述
     */
    private String          description;

    /**
     * 商户号
     */
    private String          merchantNo;

    /**
     * 回调通知地址
     */
    private String          returnUrl;

    /**
     * 支付额外信息
     */
    private Map<String,String> paymentExt;


    /**
     * 获取支付命令类型。
     *
     * @return 返回该命令的类型枚举。
     */
    @Override
    public CommandTypeEnum getCommandType() {
        return CommandTypeEnum.BANK_PAY;
    }

    /**
     * 获取命令所针对的支付工具。
     *
     * @return 返回命令所针对的支付工具。
     */
    @Override
    public PayToolTypeEnum getPayToolType() {
        return PayToolTypeEnum.BANK_CARD;
    }

    /**
     * 获取该命令对应的处理器。
     *
     * @return 返回该命令的对应的处理器的枚举。
     */
    @Override
    public CommandProcessorEnum getProcessorType() {
        return CommandProcessorEnum.BANK_PROCESSOR;
    }

    /**
     * 获取优先级
     *
     * @return 级别
     */
    @Override
    public int getOrder() {
        return 0;
    }

    /**
     * 获取指令ID
     *
     * @return 指令编号
     */
    @Override
    public String getCommandNo() {
        return requestBizNo;
    }

    /**
     * 将命令对象与指定的命令对象进行比较
     * @param   paymentCommand  命令对象
     * @return  返回负整数，零，或正整数
     */
    @Override
    public int compareTo(Command paymentCommand) {
        return this.getOrder() - paymentCommand.getOrder();
    }

}
